package server.fassade;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.ejb.Stateless;

import server.ejb.beans.Bahn;
import server.ejb.beans.Fluggesellschaft;
import server.ejb.beans.Flugzeug;
import server.ejb.beans.Flugzeugtyp;
import server.ejb.beans.Gebuehr;
import server.ejb.beans.Konto;
import server.ejb.beans.Lotse;
import server.ejb.beans.Parkposition;

@Stateless
public class LandungBean implements Serializable, IFlughafenController {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@EJB
	FlughafenController controller;

	private Flugzeug flugzeug;
	private Fluggesellschaft fluggesellschaft;

	private List<Lotse> lotsen;
	private List<Bahn> bahnen;
	private List<Parkposition> parkpositionen;
	private List<Flugzeug> flugzeuge;
	private List<Fluggesellschaft> fluggesellschaften;
	private List<Flugzeugtyp> flugzeugtypen;
	private List<Flugzeug> wartendAufLandung;

	@SuppressWarnings("unused")
	@PostConstruct
	private void init() {
		controller= getFlughafenController();
		flugzeug = new Flugzeug();
		fluggesellschaft = new Fluggesellschaft();
		
		flugzeugtypen = new ArrayList<Flugzeugtyp>();
		fluggesellschaften = new ArrayList<Fluggesellschaft>();
		lotsen = new ArrayList<Lotse>();
		parkpositionen = controller.findParkpositionAll();
		bahnen = controller.findBahnAll();
	}

	public void createFluggesellschaft() {
		controller.saveFluggesellschaft(fluggesellschaft);
		fluggesellschaften.add(fluggesellschaft);
		this.fluggesellschaft = new Fluggesellschaft();
	}

	public void createFlugzeug() {
		controller.saveFlugzeug(flugzeug);
		flugzeuge.add(flugzeug);
		this.flugzeug = new Flugzeug();
	}

	public void landen(Flugzeug flugzeug) {					
		List<Bahn> freieBahnen = controller.findBahnFreie();	
		if(freieBahnen.isEmpty() || freieBahnen == null){
			wartendAufLandung = getFlugzeuge();
			wartendAufLandung.add(flugzeug);
			this.flugzeug = new Flugzeug();
		}
		Bahn freieBahn = freieBahnen.get(0);
		Date belegtBis = new Date();
		int minutes = belegtBis.getMinutes();
		belegtBis.setMinutes(minutes+2);
		freieBahn.setBelegtBis(belegtBis);

	}
	
	
	// ****************** Getter & Setter ********************************

	public List<Flugzeug> getWartendAufLandung() {
		if (wartendAufLandung == null) {
			wartendAufLandung = new ArrayList<Flugzeug>();
		}
		return wartendAufLandung;
	}

	public List<Flugzeug> getFlugzeuge() {
		return flugzeuge;
	}

	public List<Fluggesellschaft> getFluggesellschaften() {
		return fluggesellschaften;
	}

	public List<Bahn> getBahnen() {
		return bahnen;
	}

	public List<Parkposition> getParkpositionen() {
		return parkpositionen;
	}

	public Flugzeug getFlugzeug() {
		return flugzeug;
	}

	public void setFlugzeug(Flugzeug flugzeug) {
		this.flugzeug = flugzeug;
	}

	public Fluggesellschaft getFluggesellschaft() {
		return fluggesellschaft;
	}

	public void setFluggesellschaft(Fluggesellschaft fluggesellschaft) {
		this.fluggesellschaft = fluggesellschaft;
	}

	private FlughafenController getFlughafenController()
	{
		if(controller == null){
			controller = new FlughafenController();
		}
		return controller;
	}

	@Override
	public List<Flugzeugtyp> getFlugzeugtypen() 
	{
		return flugzeugtypen;
	}

	@Override
	public void createFlugzeug(String bezeichnung, Flugzeugtyp flugzeugtyp, Fluggesellschaft fluggesellschaft) 
	{
		Flugzeug z = new Flugzeug();
		z.setFlugzeugtyp(flugzeugtyp);
		z.setFluggesellschaft(fluggesellschaft);
		z.setBemerkung(bezeichnung);
		flugzeuge.add(z);
	}

	@Override
	public void createFlugzeugTyp(String bezeichnung, Gebuehr gebuehr) 
	{
		Flugzeugtyp typ = new Flugzeugtyp();
		typ.setGebuehr(gebuehr);
		typ.setTyp(bezeichnung);
	}

	@Override
	public void createFluggeselschaft(String name) 
	{
		Fluggesellschaft f = new Fluggesellschaft();
		f.setName(name);
	}

	@Override
	public List<Lotse> getLotsen() 
	{
		return lotsen;
	}

	@Override
	public void setSollZeit(String zeit) 
	{
		// TODO
	}

	@Override
	public void setSollDatum(String datum) 
	{
		// TODO Auto-generated method stub
		
	}

	@Override
	public void setIstZeit(String zeit) 
	{
		// TODO Auto-generated method stub
		
	}

	@Override
	public void setIstDatum(String datum) 
	{
		// TODO Auto-generated method stub
		
	}

	@Override
	public void setLandebahnStatus(int ID, boolean besetzt) 
	{
		bahnen.get(ID).setFrei(besetzt);
	}

	@Override
	public void setParkpositionStatus(int ID, boolean besetzt) 
	{
		parkpositionen.get(ID).setFrei(besetzt);
	}

	@Override
	public Flugzeug getFlugzeug(int ID) 
	{
		return flugzeuge.get(ID);
	}

	@Override
	public Flugzeugtyp getFlugzeugtyp(int ID) 
	{
		return flugzeugtypen.get(ID);
	}

	@Override
	public Fluggesellschaft getFluggeselschaft(int ID) 
	{
		return fluggesellschaften.get(ID);
	}

	@Override
	public Bahn getStartLangebahn(int ID) 
	{
		return bahnen.get(ID);
	}

	@Override
	public Parkposition getParkposition(int ID) 
	{
		return parkpositionen.get(ID);
	}

	@Override
	public void createParkposition() 
	{
		parkpositionen.add(new Parkposition());
	}

	@Override
	public void createBahn() 
	{
		bahnen.add(new Bahn());
	}
}